/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jardinevolutivo;

import org.jgap.FitnessFunction;
import org.jgap.Gene;
import org.jgap.IChromosome;

/**
 *
 * @author Luis Roberto
 */
public class Adaptacion extends FitnessFunction{

    @Override
    protected double evaluate(IChromosome flor) {
        Gene[] genes = flor.getGenes();
        int[] valores = new int[genes.length];
        //Obtenemos los valores de cada gen
        valores[Flor.TAM_FLOR] = (Integer)genes[Flor.TAM_FLOR].getAllele();
        valores[Flor.COLOR_FLOR] = (Integer)genes[Flor.COLOR_FLOR].getAllele();
        valores[Flor.TAM_TALLO] = (Integer)genes[Flor.TAM_TALLO].getAllele();
        
        return comparacion(valores, Ventana.PREFERENCIAS);
    }
    
    private double comparacion(int[] a, int[] b){
        double retorno = 0.0;
        if(a[Flor.TAM_FLOR] == b[Flor.TAM_FLOR]){
            retorno += 100/3;}
        else{
            switch(b[Flor.TAM_FLOR]){
                case 18: 
                    if( a[Flor.TAM_FLOR] >= 10 && a[Flor.TAM_FLOR] <=25 )
                        retorno += (100/3)*0.7;
                    break;
                case 38:
                    if( a[Flor.TAM_FLOR] >= 26 && a[Flor.TAM_FLOR] <=50 )
                        retorno += (100/3)*0.7;
                    break;
                case 66:
                    if( a[Flor.TAM_FLOR] >= 51 && a[Flor.TAM_FLOR] <=70 )
                    retorno += (100/3)*0.7;
                    break;
            }
        }
        
        if(a[Flor.TAM_TALLO] == b[Flor.TAM_TALLO]){
            retorno += 100/3;}
        else{
            switch(b[Flor.TAM_TALLO]){
                case 135: 
                    if( a[Flor.TAM_TALLO] >= 100 && a[Flor.TAM_TALLO] <=170 )
                        retorno += (100/3)*0.7;
                    break;
                case 205:
                    if( a[Flor.TAM_TALLO] >= 171 && a[Flor.TAM_TALLO] <=240 )
                        retorno += (100/3)*0.7;
                    break;
                case 270:
                    if( a[Flor.TAM_TALLO] >= 241 && a[Flor.TAM_TALLO] <=300 )
                    retorno += (100/3)*0.7;
                    break;
            }
        }
        
        if(a[Flor.COLOR_FLOR] == b[Flor.COLOR_FLOR]){
            retorno += 100/3;}

        System.out.println(retorno);
        return retorno;
    }
    
}
